<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>构造函数原型 prototype </title>
    <!-- 
        构造函数原型 prototype 
        构造函数通过原型分配的函数是所有对象所共享的。 
        JavaScript 规定，每一个构造函数都有一个 prototype 属性，指向另一个对象。
        注意这个 prototype 就是一 个对象，这个对象的所有属性和方法，都会被构造函数所拥有 

        我们可以把那些不变的方法，直接定义在 prototype 对象上，
        这样所有对象的实例就可以共享这些方法。
         
        因此，原型是什么？
        答：一个对象，我们也称为 prototype 为原型对象。
        原型的作用是什么？
        答：共享方法

     -->
</head>
<body>
    
</body>
<script>
    function Star(uname,age) {
        this.uname = uname
        this.age = age
    }
    Star.prototype.sing = function(song) {
        console.log(song);
    }
    var smx = new Star('smx',20)
    console.log(smx);
    smx.sing('不忘')
</script>
<!-- 
    对象原型 __proto__ 
    对象都会有一个属性 __proto__ 指向构造函数的 prototype 原型对象，
    之所以我们对象可以使用构造函数 prototype 原型对象的属性和方法，
    就是因为对象有 __proto__ 原型的存在。

    __proto__对象原型和原型对象 prototype 是等价的 ；
    __proto__对象原型的意义就在于为对象的查找机制提供一个方向，
    或者说一条路线，但是它是一个非标准属性， 因此实际开发中，不可以使用这个属性，
    它只是内部指向原型对象 prototype。

 -->
</html>